package com.trace.demo.util;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

/**
 * 日期处理工具类
 */
public class DateUtils {

    private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    
    /**
     * 解析日期时间字符串为LocalDateTime对象
     * 支持多种格式，包括ISO格式和自定义格式
     * @param dateStr 日期字符串
     * @return LocalDateTime对象，解析失败返回null
     */
    public static LocalDateTime parseDateTime(String dateStr) {
        if (dateStr == null || dateStr.trim().isEmpty()) {
            return null;
        }
        
        try {
            // 尝试使用标准格式解析
            return LocalDateTime.parse(dateStr, DATETIME_FORMATTER);
        } catch (DateTimeParseException e) {
            try {
                // 尝试解析日期，如果只有日期部分，添加时间部分
                return LocalDateTime.parse(dateStr + " 00:00:00", DATETIME_FORMATTER);
            } catch (DateTimeParseException e2) {
                try {
                    // 尝试解析ISO格式
                    return LocalDateTime.parse(dateStr.replace(" ", "T"));
                } catch (DateTimeParseException e3) {
                    System.err.println("无法解析日期: " + dateStr);
                    return null;
                }
            }
        }
    }
    
    /**
     * 格式化LocalDateTime为指定格式的字符串
     * @param dateTime 日期时间对象
     * @return 格式化后的字符串，如果日期为null则返回null
     */
    public static String formatDateTime(LocalDateTime dateTime) {
        if (dateTime == null) {
            return null;
        }
        return dateTime.format(DATETIME_FORMATTER);
    }
    
    /**
     * 格式化LocalDateTime为只包含日期部分的字符串
     * @param dateTime 日期时间对象
     * @return 格式化后的日期字符串，如果日期为null则返回null
     */
    public static String formatDate(LocalDateTime dateTime) {
        if (dateTime == null) {
            return null;
        }
        return dateTime.format(DATE_FORMATTER);
    }
} 